package org.devocean.groupbuying.dao.impl;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.devocean.groupbuying.dao.CategoriesLocalizationDAO;
import org.devocean.groupbuying.domain.CategoriesLocalization;
import org.devocean.groupbuying.domain.Category;
import org.springframework.stereotype.Repository;

@Repository
public class CategoriesLocalizationDAOImpl implements CategoriesLocalizationDAO {

	@PersistenceContext
	private EntityManager em;


	public void linkToCategory(CategoriesLocalization categoriesLocalization) {
		for (Category category : categoriesLocalization.getCategories()) {
			category.setCategoriesLocalization(categoriesLocalization);
		}
	}

	public CategoriesLocalization saveCategoriesLocalization(			
			CategoriesLocalization categoriesLocalization) {
		linkToCategory(categoriesLocalization);
		em.persist(categoriesLocalization);
		em.flush();
		return categoriesLocalization;
	}


	public CategoriesLocalization findCategoryById(Integer categoryId) {
		final Query query = em
				.createQuery("select distinct cl from CategoriesLocalization cl LEFT  JOIN FETCH cl.categories c where  c.categoryID=:categoryId");
		query.setParameter("categoryId", categoryId);
		return (CategoriesLocalization) query.getResultList().get(0);

	}

	public CategoriesLocalization updateCategoriesLocalization(
							CategoriesLocalization categoriesLocalization) {
		linkToCategory(categoriesLocalization);
		final CategoriesLocalization merged = em.merge(categoriesLocalization);
		em.flush();
		return merged;
	}


	public CategoriesLocalization findCategoriesLocalizationById(Integer localizationKey) {
		return  em.createQuery("select cl from CategoriesLocalization cl INNER JOIN FETCH cl.categories c  INNER JOIN FETCH c.category where cl.categoriesLocalizationID=:localizationKey", CategoriesLocalization.class).setParameter("localizationKey", localizationKey).getResultList().get(0);
	}

}
